var lvalid =(function(){
    function init(str){

    }
    function valid() {
        var el = document.getElementsByClassName("lvalid");
        for(var i = 0; i < el.length; i++){
           if(el[i].getAttribute("required") === "required"){
               if(isNull(el[i].value)){
                   return el[i].getAttribute("info");
               }
           }
           if(el[i].getAttribute("valid") === "int"){
                if(!isInt(el[i].value) && !isNull(el[i].value)){
                    return el[i].getAttribute("validInfo");
                }
            }
            if(el[i].getAttribute("valid") === "number" && !isNull(el[i].value)){
                if(!isNumber(el[i].value)){
                    return el[i].getAttribute("validInfo");
                }
            }
            if(el[i].getAttribute("valid") === "decimal" && !isNull(el[i].value)){
                if(!isDecimal(el[i].value)){
                    return el[i].getAttribute("validInfo");
                }
            }
            if(el[i].getAttribute("valid") === "mobile" && !isNull(el[i].value)){
                if(!isMobile(el[i].value)){
                    return el[i].getAttribute("validInfo");
                }
            }
            if(el[i].getAttribute("valid") === "phone" && !isNull(el[i].value)){
                if(!isPhone(el[i].value)){
                    return el[i].getAttribute("validInfo");
                }
            }
            if(el[i].getAttribute("valid") === "email" && !isNull(el[i].value)){
                if(!isEmail(el[i].value)){
                    return el[i].getAttribute("validInfo");
                }
            }
            if(el[i].getAttribute("valid") === "tel" && !isNull(el[i].value)){
                if(!isTel(el[i].value)){
                    return el[i].getAttribute("validInfo");
                }
            }
        }
        return true;
    }
    function getValue() {
        var validResult = valid();
        if(validResult === true){
            var el = document.getElementsByClassName("lvalid");
            var data = {};
            for(var i = 0; i < el.length; i++){
                data[el[i].getAttribute("id")] = el[i].value;
            }
            return data;
        }else{
            return validResult;
        }
    }

    /*
    用途：检查输入字符串是否为空或者全部都是空格
    输入：str
    返回：
    如果全是空返回true,否则返回false
     */
    function isNull(str) {
        if(str === 0){
            return false;
        }
        if (str === "" || str === null || str === undefined){
            return true;
        }
        var regu = "^[ ]+$";
        var re = new RegExp(regu);
        return re.test(str);
    }

    /**
     * 判断用户名格式，包含大小写英文、数字和下划线。同时用户名长度在6-15之间。
     */
    function isUsername(username) {
        var first = username.substring(0, 1);
        if (!((first >= 'a' && first <= 'z') || (first >= 'A' && first <= 'Z'))) {
            return false;
        }
        var rename = new RegExp("[a-zA-Z_][a-zA-Z_0-9]{0,}", "");
        return rename.test(username);
    }

    /**
     * 判断密码格式，包含大小写英文、数字和下划线。同时用户名长度在6-16之间。
     */
    function isPassword(password) {
        var regex = /^[0-9A-Za-z_]{6,16}$/;
        return regex.test(password);
    }


    /*
     * 用途：检查输入字符串是否只由汉字、字母 输入： value：字符串 返回： 如果通过验证返回true,否则返回false
     *
     */
    function isRealName(s) {// 判断是否是汉字、字母

        var regu = "^[a-zA-Z\u4e00-\u9fa5]+$";
        var re = new RegExp(regu);
        if (re.test(s)) {
            return true;
        } else {
            return false;
        }
    }

    /*
     * 用途：检查输入的Email信箱格式是否正确 输入： strEmail：字符串 返回： 如果通过验证返回true,否则返回false
     *
     */
    function isEmail(strEmail) {
        // var emailReg = /^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/;
        var emailReg = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
        if (emailReg.test(strEmail)) {
            return true;
        } else {
            return false;
        }
    }

    /*
     * 用途：检查输入对象的值是否符合整数格式 输入：str 输入的字符串 返回：如果通过验证返回true,否则返回false
     *
     */
    function isNumber(str) {
        var regu = /^[-]{0,1}[0-9]{1,}$/;
        return regu.test(str);
    }

    /*
     * 用途：检查输入字符串是否符合正整数格式 输入： s：字符串 返回： 如果通过验证返回true,否则返回false
     *
     */
    function isInt(s) {
        if(s === null || s === undefined){
            return false;
        }
        var regu = "^[0-9]+$";
        var re = new RegExp(regu);
        if (s.search(re) != -1) {
            return true;
        } else {
            return false;
        }
    }

    /*
     * 用途：检查输入字符串是否是带小数的数字格式,可以是负数 输入： s：字符串 返回： 如果通过验证返回true,否则返回false
     *
     */
    function isDecimal(str) {
        if (isNumber(str))
            return true;
        var re = /^[-]{0,1}(\d+)[\.]+(\d+)$/;
        if (re.test(str)) {
            if (RegExp.$1 == 0 && RegExp.$2 == 0)
                return false;
            return true;
        } else {
            return false;
        }
    }

    /*
     * 用途：检查输入手机号码是否正确 输入： s：字符串 返回： 如果通过验证返回true,否则返回false
     *
     */
    function isMobile(s) {
        var length = s.length;
        if(length != 11){
            return false;
        }
        var first = s.charAt(0);
        if(first != 1){
            return false;
        }
        return true;
    }

    /*
     * 用途：检查输入的电话号码格式是否正确 输入： strPhone：字符串 返回： 如果通过验证返回true,否则返回false
     *
     */
    function isPhone(strPhone) {
        var phoneRegWithArea = /^[0][1-9]{2,3}-[0-9]{5,10}$/;
        var phoneRegNoArea = /^[1-9]{1}[0-9]{5,8}$/;
        if (strPhone.length > 9) {
            if (phoneRegWithArea.test(strPhone)) {
                return true;
            } else {
                return false;
            }
        } else {
            if (phoneRegNoArea.test(strPhone)) {
                return true;
            } else {
                return false;
            }

        }
    }

    /**
     * 验证手机号+座机号
     * @param s
     * @returns {boolean}
     */
    function isTel(s) {
        if(isMobile(s)){
            return true;
        }
        if(isPhone(s)){
            return true;
        }
        return false;
    }

    return{
        init: init,
        valid: valid,
        getValue: getValue,
        isNull: isNull,
        isUsername: isUsername,
        isPassword: isPassword,
        isRealName: isRealName,
        isEmail: isEmail,
        isNumber: isNumber,
        isInt: isInt,
        isDecimal: isDecimal,
        isMobile: isMobile,
        isPhone: isPhone,
        isTel: isTel,
    };
})();
